﻿using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenReflect.Common;

namespace OpenReflect.Test.CommonTests
{
	/// <summary>
	/// Summary description for UnitTest1
	/// </summary>
	[TestClass]
	public class CodeWriterTests
	{
		#region generated code

		/// <summary>
		///Gets or sets the test context which provides
		///information about and functionality for the current test run.
		///</summary>
		public TestContext TestContext { get; set; }

		#region Additional test attributes

		//
		// You can use the following additional attributes as you write your tests:
		//
		// Use ClassInitialize to run code before running the first test in the class
		// [ClassInitialize()]
		// public static void MyClassInitialize(TestContext testContext) { }
		//
		// Use ClassCleanup to run code after all tests in a class have run
		// [ClassCleanup()]
		// public static void MyClassCleanup() { }
		//
		// Use TestInitialize to run code before running each test 
		// [TestInitialize()]
		// public void MyTestInitialize() { }
		//
		// Use TestCleanup to run code after each test has run
		// [TestCleanup()]
		// public void MyTestCleanup() { }
		//

		#endregion

		#endregion

		[TestMethod]
		public void should_keep_indent_in_newline()
		{
			var sw = new StringWriter();
			var formatter = new CodeWriter(sw);
			formatter.Write("sample");
			formatter.Write(true);
			formatter.IncreaseIndent();
			formatter.WriteLine();
			formatter.Write("somevalue");
			formatter.WriteLine();
			formatter.Write("another value");
			Assert.AreEqual("sampleTrue\r\n\tsomevalue\r\n\tanother value", sw.ToString());
		}

		[TestMethod]
		public void should_decrease_indent_when_called()
		{
			var sw = new StringWriter();
			var formatter = new CodeWriter(sw);
			formatter.Write("sample");
			formatter.Write(true);
			formatter.IncreaseIndent();
			formatter.WriteLine();
			formatter.Write("somevalue");
			formatter.DecreaseIndent();
			formatter.WriteLine();
			formatter.Write("another value");
			Assert.AreEqual("sampleTrue\r\n\tsomevalue\r\nanother value", sw.ToString());
		}
	}
}